/**
 * 运行Store标准化脚本
 * 使用方法：在项目根目录运行 node ./miniprogram/scripts/standardize_stores.js
 */

// 导入标准化工具
const { batchStandardizeStores } = require('../store/helpers/store_standardizer_tool');
const path = require('path');
const fs = require('fs');

// 项目根目录
const ROOT_DIR = path.resolve(__dirname, '../');

// 全局Store文件列表
const GLOBAL_STORES = [
  {
    path: path.join(ROOT_DIR, 'store/global/user.js'),
    name: 'userStore',
    type: 'global'
  },
  {
    path: path.join(ROOT_DIR, 'store/global/message.js'),
    name: 'messageStore',
    type: 'global'
  },
  {
    path: path.join(ROOT_DIR, 'store/global/ui.js'),
    name: 'uiStore',
    type: 'global'
  },
  {
    path: path.join(ROOT_DIR, 'store/global/app.js'),
    name: 'appStore',
    type: 'global'
  },
  {
    path: path.join(ROOT_DIR, 'store/global/project.js'),
    name: 'projectStore',
    type: 'global'
  },
  {
    path: path.join(ROOT_DIR, 'store/global/cache.js'),
    name: 'cacheStore',
    type: 'global'
  },
  {
    path: path.join(ROOT_DIR, 'store/global/error_handler.js'),
    name: 'errorStore',
    type: 'global'
  },
  {
    path: path.join(ROOT_DIR, 'store/global/fav_foot.js'),
    name: 'favStore',
    type: 'global'
  }
];

// 模块Store文件列表
// 这里可以添加模块Store的配置
const MODULE_STORES = [];

/**
 * 自动扫描模块目录并添加到MODULE_STORES
 */
function scanModuleStores() {
  try {
    const modulesDir = path.join(ROOT_DIR, 'store/modules');
    if (!fs.existsSync(modulesDir)) return;
    
    const modules = fs.readdirSync(modulesDir);
    
    modules.forEach(module => {
      const moduleDir = path.join(modulesDir, module);
      const stat = fs.statSync(moduleDir);
      
      if (stat.isDirectory() && module !== 'cache' && !module.startsWith('.')) {
        // 扫描模块目录下的JS文件
        const files = fs.readdirSync(moduleDir);
        
        files.forEach(file => {
          if (file.endsWith('.js') && !file.startsWith('index') && !file.includes('_helper')) {
            const filePath = path.join(moduleDir, file);
            const storeName = file.replace('.js', '') + 'Store';
            
            MODULE_STORES.push({
              path: filePath,
              name: storeName,
              type: 'module',
              module: module
            });
          }
        });
      }
    });
    
    console.log(`找到 ${MODULE_STORES.length} 个模块Store文件`);
  } catch (error) {
    console.error('扫描模块Store失败:', error);
  }
}

/**
 * 运行标准化过程
 */
function run() {
  console.log('=== 开始标准化Store ===');
  
  // 扫描模块Store
  scanModuleStores();
  
  // 标准化全局Store
  console.log('\n=== 标准化全局Store ===');
  const globalResult = batchStandardizeStores(GLOBAL_STORES);
  
  // 标准化模块Store
  console.log('\n=== 标准化模块Store ===');
  const moduleResult = batchStandardizeStores(MODULE_STORES);
  
  console.log('\n=== 标准化完成 ===');
  console.log(`全局Store: ${globalResult ? '成功' : '部分失败'}`);
  console.log(`模块Store: ${moduleResult ? '成功' : '部分失败'}`);
}

// 执行标准化
run(); 